package com.kabuda.hot100.哈希.medium;

import java.util.*;

/**
 * @author kabuda
 * @create 2024-11-27 17:43
 * <p>
 * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 * 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
 * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 */
public class t49_字母异位词分组 {
    public static void main(String[] args) {
        String[] strs = new String[]{"eat", "tea", "tan", "ate", "nat", "bat"};
        System.out.println(groupAnagrams(strs));
    }


    public static List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        //遍历字符串
        for (int i = 0; i < strs.length; i++) {
            //排序重组
            char[] charArray = strs[i].toCharArray();
            Arrays.sort(charArray);
            String str = new String(charArray);
            //获取值，如果为空，则创建一个list，并把当前值存进去
            List<String> list = map.getOrDefault(str, new ArrayList<>());
            list.add(str);
            map.put(str, list);
        }
        //把values放到新的list中返回
        return new ArrayList<>(map.values());
    }


}
